package main

import (
	"fmt"
	"time"
)

func main() {
	//1、获取当前日期
	timeObj := time.Now() //2023-12-20 23:02:42.596486 +0800 CST m=+0.000429084
	fmt.Println(timeObj)
	Year := timeObj.Year()
	Month := timeObj.Month()
	Day := timeObj.Day()
	Hour := timeObj.Hour()
	Minute := timeObj.Minute()
	Second := timeObj.Second()
	//%02d 表示宽度， 整数不够2列就补0
	fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", Year, Month, Day, Hour, Minute, Second)

	/*
	   时间类型有一个自带的方法Format进行格式化
	   需要注意的是Go语言中格式化时间模板不是常见的YYYY-MM-DD HH:mm:ss
	   而是使用Go的诞生时间2006年1月2号15点04分（记忆口诀为 2006 1 2 3 4）
	   2006年
	   01 月
	   02 日
	   03 时  12小时制  15 24小时制
	   04 分
	   05 秒
	*/
	fmt.Println(timeObj.Format("2006/01/02 15//04/05")) //  2023/12/20 23//13/55

	//2、获取当前时间戳
	unixTime := timeObj.Unix()
	fmt.Println("当前时间戳", unixTime) //1703085511

	//3、时间戳转换成日期
	var timeNum int64 = 1703085511
	timeTest := time.Unix(timeNum, 0)
	fmt.Println(timeTest, timeTest.Format("2006-01-02 03-04-05")) //2023-12-20 23:18:31 +0800 CST  |  2023-12-20 11-18-31

	//4、字符串转换时间戳
	//step1、先转成时间格式
	var str = "2023-12-21 12:06:47"
	strObj, _ := time.ParseInLocation("2006-01-02 03:04:05", str, time.Local)
	fmt.Println(strObj) //2023-12-21 12:06:47 +0800 CST
	//step2、时间格式转成时间戳
	fmt.Println(strObj.Unix()) //1703131607

	//5、time包定义的时间间隔类型的常量
	/*
		   const (
			Nanosecond Duration = 1
			Microsecond         = 1000 * Nanosecond
			Millisecond         = 1000 * Microsecond
			Second              = 1000 * Millisecond
			Minute              = 60 * Second
			Hour                = 60 * Minute
		   )
	*/
	fmt.Println(time.Nanosecond)
	fmt.Println(time.Microsecond)

	//6、时间操作函数
	var timeObj2 = time.Now()
	fmt.Println(timeObj2.Add((time.Hour))) //增加了一小时
}
